/**
 * AI服务层 - 集成Mastra AI框架
 * 提供智能对话、内容推荐、多媒体分析等AI功能
 */

import { request } from '@/utils/request'
import type { ChatSession, Message, Content } from '@/config/supabase'

// AI配置接口
export interface AIConfig {
  model: string
  temperature: number
  maxTokens: number
  systemPrompt: string
}

// AI响应接口
export interface AIResponse {
  content: string
  type: 'text' | 'image' | 'audio' | 'video'
  confidence: number
  suggestions?: string[]
  relatedContent?: Content[]
}

// 对话上下文接口
export interface ConversationContext {
  sessionId: string
  userId: string
  babyId?: string
  messages: Message[]
  metadata?: Record<string, any>
}

/**
 * AI服务类
 */
export class AIService {
  private static config: AIConfig = {
    model: 'gpt-3.5-turbo',
    temperature: 0.7,
    maxTokens: 1000,
    systemPrompt: `你是一个专业的母婴AI助手，具备以下能力：
1. 提供专业的育儿建议和指导
2. 解答母婴健康相关问题
3. 推荐适合的育儿产品和内容
4. 分析宝宝成长数据并给出建议
5. 提供个性化的育儿方案

请始终保持专业、温暖、耐心的语调，确保信息准确可靠。`
  }

  /**
   * 发送消息到AI并获取回复
   */
  static async sendMessage(
    message: string,
    context: ConversationContext,
    type: 'text' | 'image' | 'audio' = 'text'
  ): Promise<AIResponse> {
    try {
      // 构建对话历史
      const conversationHistory = this.buildConversationHistory(context)
      
      // 调用AI API
      const response = await this.callAI({
        message,
        history: conversationHistory,
        type,
        config: this.config
      })
      
      return response
    } catch (error) {
      console.error('AI服务调用失败:', error)
      return this.getFallbackResponse(message)
    }
  }

  /**
   * 构建对话历史
   */
  private static buildConversationHistory(context: ConversationContext): any[] {
    const history = [{
      role: 'system',
      content: this.config.systemPrompt
    }]

    // 添加最近的对话记录（限制数量以控制token使用）
    const recentMessages = context.messages.slice(-10)
    
    recentMessages.forEach(msg => {
      history.push({
        role: msg.role === 'user' ? 'user' : 'assistant',
        content: msg.content
      })
    })

    return history
  }

  /**
   * 调用AI模型
   */
  private static async callAI(params: {
    message: string
    history: any[]
    type: string
    config: AIConfig
  }): Promise<AIResponse> {
    // 这里集成实际的AI服务（如OpenAI、Claude等）
    // 目前使用模拟实现
    return this.simulateAICall(params)
  }

  /**
   * 模拟AI调用（开发阶段使用）
   */
  private static async simulateAICall(params: any): Promise<AIResponse> {
    // 模拟网络延迟
    await new Promise(resolve => setTimeout(resolve, 1000 + Math.random() * 2000))
    
    const message = params.message.toLowerCase()
    let response = ''
    let suggestions: string[] = []
    
    // 基于关键词的简单回复逻辑
    if (message.includes('喂养') || message.includes('奶粉') || message.includes('母乳')) {
      response = '关于宝宝喂养，我建议您根据宝宝的年龄和发育情况来制定合适的喂养计划。0-6个月的宝宝最好纯母乳喂养，如果母乳不足可以适当添加配方奶粉。'
      suggestions = ['如何判断宝宝是否吃饱？', '什么时候开始添加辅食？', '如何选择合适的奶粉？']
    } else if (message.includes('睡眠') || message.includes('哄睡') || message.includes('夜醒')) {
      response = '宝宝的睡眠问题很常见。建立规律的作息时间很重要，可以通过固定的睡前仪式帮助宝宝养成良好的睡眠习惯。如果宝宝频繁夜醒，可能是饥饿、尿湿或者环境因素导致的。'
      suggestions = ['如何建立宝宝的睡眠规律？', '宝宝夜醒怎么办？', '什么是睡眠倒退？']
    } else if (message.includes('发育') || message.includes('成长') || message.includes('里程碑')) {
      response = '每个宝宝的发育节奏都不同，但有一些重要的发育里程碑需要关注。比如3个月会抬头，6个月会坐，12个月会走路等。如果您担心宝宝的发育情况，建议定期体检并咨询儿科医生。'
      suggestions = ['宝宝发育迟缓的表现有哪些？', '如何促进宝宝大脑发育？', '什么时候需要看医生？']
    } else {
      response = '我理解您的关心。作为母婴AI助手，我会尽力为您提供专业的建议。如果您有具体的问题，请详细描述一下情况，我会给出更针对性的建议。'
      suggestions = ['宝宝喂养问题', '睡眠作息调整', '发育成长指导', '健康护理建议']
    }
    
    return {
      content: response,
      type: 'text',
      confidence: 0.85,
      suggestions,
      relatedContent: await this.getRelatedContent(message)
    }
  }

  /**
   * 获取相关内容推荐
   */
  private static async getRelatedContent(query: string): Promise<Content[]> {
    // 模拟相关内容推荐
    const mockContent: Content[] = [
      {
        id: '1',
        title: '新生儿喂养指南',
        content: '详细介绍新生儿喂养的注意事项和技巧',
        type: 'article',
        category: 'feeding',
        author_id: 'system',
        tags: ['喂养', '新生儿', '母乳'],
        like_count: 128,
        view_count: 1520,
        comment_count: 45,
        created_at: new Date().toISOString(),
        updated_at: new Date().toISOString()
      },
      {
        id: '2',
        title: '宝宝睡眠训练方法',
        content: '科学的宝宝睡眠训练方法和技巧分享',
        type: 'video',
        category: 'sleep',
        author_id: 'expert_001',
        tags: ['睡眠', '训练', '作息'],
        like_count: 89,
        view_count: 756,
        comment_count: 23,
        duration: 480,
        created_at: new Date().toISOString(),
        updated_at: new Date().toISOString()
      }
    ]
    
    return mockContent.slice(0, 2)
  }

  /**
   * 生成建议问题
   */
  static async generateSuggestions(context: ConversationContext): Promise<string[]> {
    const suggestions = [
      '我的宝宝几个月可以添加辅食？',
      '如何判断宝宝是否发育正常？',
      '宝宝夜里总是哭闹怎么办？',
      '什么时候需要给宝宝断奶？',
      '如何选择适合的婴儿用品？'
    ]
    
    // 根据上下文返回个性化建议
    return suggestions.slice(0, 3)
  }

  /**
   * 生成会话标题
   */
  static async generateSessionTitle(firstMessage: string): Promise<string> {
    const message = firstMessage.toLowerCase()
    
    if (message.includes('喂养')) return '宝宝喂养咨询'
    if (message.includes('睡眠')) return '睡眠问题解答'
    if (message.includes('发育')) return '成长发育指导'
    if (message.includes('健康')) return '健康护理建议'
    
    return '育儿咨询'
  }

  /**
   * 分析用户意图
   */
  static async analyzeIntent(message: string): Promise<{
    intent: string
    confidence: number
    entities: Record<string, any>
  }> {
    const message_lower = message.toLowerCase()
    
    // 简单的意图识别逻辑
    if (message_lower.includes('喂养') || message_lower.includes('奶')) {
      return {
        intent: 'feeding_consultation',
        confidence: 0.9,
        entities: { topic: 'feeding' }
      }
    }
    
    if (message_lower.includes('睡眠') || message_lower.includes('睡觉')) {
      return {
        intent: 'sleep_consultation',
        confidence: 0.85,
        entities: { topic: 'sleep' }
      }
    }
    
    return {
      intent: 'general_consultation',
      confidence: 0.7,
      entities: {}
    }
  }

  /**
   * 获取推荐内容 - 返回适配ContentItem格式的数据
   */
  static async getRecommendedContent(
    userId: string,
    babyId?: string,
    category?: string
  ): Promise<any[]> {
    try {
      // 这里应该调用推荐算法API
      // 目前返回模拟数据，格式已适配ContentItem接口
      const mockRecommendations = [
        {
          id: 'ai_rec_1',
          type: 'article',
          title: '0-3个月宝宝护理要点',
          content: '新生儿护理的关键知识点和注意事项',
          media_url: 'https://trae-api-us.mchost.guru/api/ide/v1/text_to_image?prompt=newborn%20baby%20care%20guide&image_size=portrait_4_3',
          author_id: 'expert_001',
          view_count: 3200,
          like_count: 245,
          comment_count: 89,
          tags: ['新生儿', '护理', '健康'],
          created_at: new Date().toISOString(),
          category: 'care'
        },
        {
          id: 'ai_rec_2',
          type: 'guide',
          title: '辅食添加时间表',
          content: '科学的辅食添加指南和营养搭配',
          media_url: 'https://trae-api-us.mchost.guru/api/ide/v1/text_to_image?prompt=baby%20food%20nutrition%20guide&image_size=portrait_4_3',
          author_id: 'nutritionist_001',
          view_count: 2100,
          like_count: 189,
          comment_count: 67,
          tags: ['辅食', '营养', '时间表'],
          created_at: new Date().toISOString(),
          category: 'feeding'
        },
        {
          id: 'ai_rec_3',
          type: 'video',
          title: '宝宝睡眠训练方法',
          content: '科学的睡眠训练技巧和注意事项',
          media_url: 'https://trae-api-us.mchost.guru/api/ide/v1/text_to_image?prompt=baby%20sleep%20training%20peaceful&image_size=portrait_4_3',
          duration: 480,
          author_id: 'sleep_expert_001',
          view_count: 1850,
          like_count: 156,
          comment_count: 43,
          tags: ['睡眠', '训练', '作息'],
          created_at: new Date().toISOString(),
          category: 'sleep'
        },
        {
          id: 'ai_rec_4',
          type: 'article',
          title: '宝宝发育里程碑指南',
          content: '各月龄宝宝发育指标和注意事项',
          media_url: 'https://trae-api-us.mchost.guru/api/ide/v1/text_to_image?prompt=baby%20development%20milestones&image_size=portrait_4_3',
          author_id: 'pediatrician_001',
          view_count: 2800,
          like_count: 298,
          comment_count: 112,
          tags: ['发育', '里程碑', '健康'],
          created_at: new Date().toISOString(),
          category: 'health'
        }
      ]
      
      // 根据分类过滤内容
      if (category && category !== 'all') {
        return mockRecommendations.filter(item => item.category === category)
      }
      
      return mockRecommendations
    } catch (error) {
      console.error('获取推荐内容失败:', error)
      return []
    }
  }

  /**
   * 创建新的聊天会话
   */
  static async createChatSession(
    userId: string,
    title?: string,
    babyId?: string
  ): Promise<ChatSession> {
    const sessionId = `session_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`
    
    const session: ChatSession = {
      id: sessionId,
      user_id: userId,
      baby_id: babyId,
      title: title || '新的对话',
      last_message: '',
      context: {},
      created_at: new Date().toISOString(),
      updated_at: new Date().toISOString()
    }
    
    return session
  }

  /**
   * 获取用户的聊天会话列表
   */
  static async getUserChatSessions(userId: string): Promise<ChatSession[]> {
    try {
      // 这里应该从数据库获取用户的会话列表
      // 目前返回模拟数据
      const mockSessions: ChatSession[] = [
        {
          id: 'session_001',
          user_id: userId,
          title: '宝宝喂养咨询',
          last_message: '谢谢您的建议，我会注意的',
          context: { topic: 'feeding', messages_count: 5 },
          created_at: new Date(Date.now() - 86400000).toISOString(),
          updated_at: new Date(Date.now() - 3600000).toISOString()
        },
        {
          id: 'session_002',
          user_id: userId,
          title: '睡眠问题解答',
          last_message: '宝宝现在睡得好多了',
          context: { topic: 'sleep', messages_count: 3 },
          created_at: new Date(Date.now() - 172800000).toISOString(),
          updated_at: new Date(Date.now() - 7200000).toISOString()
        }
      ]
      
      return mockSessions
    } catch (error) {
      console.error('获取聊天会话失败:', error)
      return []
    }
  }

  /**
   * 获取降级响应（当AI服务不可用时）
   */
  private static getFallbackResponse(message: string): AIResponse {
    return {
      content: '抱歉，AI服务暂时不可用。请稍后再试，或者您可以浏览我们的专业内容获取帮助。',
      type: 'text',
      confidence: 0.5,
      suggestions: [
        '浏览育儿知识库',
        '查看专家文章',
        '联系在线客服'
      ]
    }
  }

  /**
   * 更新AI配置
   */
  static updateConfig(newConfig: Partial<AIConfig>): void {
    this.config = { ...this.config, ...newConfig }
  }

  /**
   * 获取当前AI配置
   */
  static getConfig(): AIConfig {
    return { ...this.config }
  }
}

export default AIService